package com.example.springboot.config;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;

import javax.sql.DataSource;
import java.io.IOException;
import java.util.Properties;

/**
 * 原生 Hibernate API 手动配置 SessionFactory 的方式
 * <p>
 * <p>
 * @author Zhang.Z
 * @version 2025-09-22
 */
//@Configuration
//public class HibernateConfig {
//
//
//    @Bean
//    public DataSource dataSource() {
//        HikariConfig config = new HikariConfig();
//        DatabaseConfig databaseConfig = new DatabaseConfig();
//        config.setJdbcUrl(databaseConfig.url);
//        config.setUsername(databaseConfig.username);
//        config.setPassword(databaseConfig.password);
//        config.setDriverClassName(databaseConfig.driverClassName);
//        return new HikariDataSource(config);
//    }
//
//
//    /**
//     * 配置会话工厂
//     */
//    @Bean(name = "sessionFactory")
////    @Bean(name="entityManagerFactory")
//    public SessionFactory sessionFactoryBean(DataSource dataSource) throws IOException {
//        LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
//        // 设置数据源
//        sessionFactoryBean.setDataSource(dataSource);
//        // entity包路径
//        sessionFactoryBean.setPackagesToScan("cn.ybzy.demo.entity");
//        // 配置hibernate属性
//        Properties properties = new Properties();
//        // sql方言
//        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
//        // 自动创建|更新|验证数据库表结构
//        properties.setProperty("hibernate.hbm2ddl.auto", "update");
//        // 输出sql到控制台
//        properties.setProperty("hibernate.show_sql", "true");
//        // 打印漂亮的sql
//        properties.setProperty("hibernate.format_sql", "true");
//        properties.setProperty("hibernate.current_session_context_class", "org.springframework.orm.hibernate5.SpringSessionContext");
//        sessionFactoryBean.setHibernateProperties(properties);
//        sessionFactoryBean.afterPropertiesSet();
//        SessionFactory sessionFactory = sessionFactoryBean.getObject();
//
//        return sessionFactory;
//    }
//
//
//    /**
//     * 配置事务管理器
//     */
//    @Bean(name = "transactionManager")
//    public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
//        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
//        // 设置 sessionFactory
//        transactionManager.setSessionFactory(sessionFactory);
//        return transactionManager;
//    }
//
//
//    public static final class DatabaseConfig {
//        String url;
//        String username;
//        String password;
//        String driverClassName;
//
//        //setting popr
//    }
//}
